Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [C#] Leggere una stringa da un vettore di tipo byte
Forum - C# / VB.NET - [C#] Leggere una stringa da un vettore di tipo byte

Avatar
xeeynamo (Normal User)
Pro


Messaggi: 66
Iscritto: 14/03/2008

Segnala al moderatore
Postato alle 23:00
Giovedì, 02/07/2009
Questo topic è stato chiuso dal moderatore

Salve, stò facendo un programma in C# e ho difficoltà a risolvere questo seguente problema:
Ho un vettore di tipo byte (Dichiarato con byte[] rom=new byte[0x100000]) che legge un intero file di dimensione fissa (1048576 byte) mettendolo nella variabile rom (uso file.Read(rom, 0, (int)file.Length); )
Una volta fatto questo ho bisogno di leggere parte di quel vettore (Ad esempio partendo dall'offset 0x2000 e magari aquisendo un tot di byte) come testo e metterlo in un TextBox. Come posso fare? :)

PM
Avatar
Gianluca87 (Ex-Member)
Expert


Messaggi: 300
Iscritto: 16/11/2008

Segnala al moderatore
Postato alle 9:35
Venerdì, 03/07/2009
Testo quotato

Postato originariamente da xeeynamo:

Salve, stò facendo un programma in C# e ho difficoltà a risolvere questo seguente problema:
Ho un vettore di tipo byte (Dichiarato con byte[] rom=new byte[0x100000]) che legge un intero file di dimensione fissa (1048576 byte) mettendolo nella variabile rom (uso file.Read(rom, 0, (int)file.Length); )
Una volta fatto questo ho bisogno di leggere parte di quel vettore (Ad esempio partendo dall'offset 0x2000 e magari aquisendo un tot di byte) come testo e metterlo in un TextBox. Come posso fare? :)



prova così magari è una cosa banale che hai già provato

2 variabili puntatori
Codice sorgente - presumibilmente C# / VB.NET

  1. int _vi; //Variabile inizio
  2. int _vf; //Variabile fine
  3. string _Risultato = null;
  4.  
  5. for(int i = _vi; i <= _vf; i++)
  6. {
  7.  _Risultato += rom[i].ToString();
  8. }


l'esempio quasi sicuramente non funziona, serve solamente per darti un idea... ci sono sicuramente funzioni più evolute per farlo...prova a documentarti sugli array, vettori ecc per c#

Ultima modifica effettuata da Gianluca87 il 03/07/2009 alle 9:58
PM
Avatar
xeeynamo (Normal User)
Pro


Messaggi: 66
Iscritto: 14/03/2008

Segnala al moderatore
Postato alle 11:01
Venerdì, 03/07/2009
Testo quotato

Postato originariamente da Gianluca87:
prova così magari è una cosa banale che hai già provato

2 variabili puntatori
Codice sorgente - presumibilmente C# / VB.NET

  1. int _vi; //Variabile inizio
  2. int _vf; //Variabile fine
  3. string _Risultato = null;
  4.  
  5. for(int i = _vi; i <= _vf; i++)
  6. {
  7.  _Risultato += rom[i].ToString();
  8. }


l'esempio quasi sicuramente non funziona, serve solamente per darti un idea... ci sono sicuramente funzioni più evolute per farlo...prova a documentarti sugli array, vettori ecc per c#


No, purtroppo non è ciò che cercavo :( perchè così facendo mi restituirebbe il valore in decimale sotto forma di testo, il che non mi servirebbe granchè... In c++ tipo avrei fatto così:
Codice sorgente - presumibilmente Plain Text

  1. for(int i=0;i<0x10000;i++) printf("%c",rom[i]);



oppure così:
Codice sorgente - presumibilmente C# / VB.NET

  1. char *buffer=(char*)malloc(0x10000);
  2. fread(buffer,0x800,0x200,pFile);
  3. printf("%s",buffer);


dove invece di mettere l'intero file in un buffer, metto solo la porzione di file che mi serve e la stampo. Però lì darei l'output su console, ma dato che a me servirebbe un'applicazione grafica... :)
Inoltre se provo a fare tText.Text=Vars.rom.ToString(); nella TextBox mi comparirà System.Byte[]
Il file che viene caricato inoltre, è in forma binaria (Di fatti l'obiettivo di questo programma è modificare i dialoghi di un giochetto per snes :P) quindi volendo manco lo si può caricare interamente sotto forma di testo :grr:

PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 13:19
Venerdì, 03/07/2009
Codice sorgente - presumibilmente C#

  1. IO.BinaryReader Reader = new IO.BinaryReader(new IO.FileStream("file", IO.FileMode.Open));
  2. const Int32 Length = 0x800;
  3. byte[] Buffer = new byte[Length];
  4. Reader.BaseStream.Position = 0x200;
  5. Buffer = Reader.ReadBytes(Length);
  6. Reader.Close();
  7. string Text = System.Text.UTF8Encoding.UTF8.GetString(Buffer);


Ultima modifica effettuata da Il Totem il 03/07/2009 alle 13:20
PM
Avatar
xeeynamo (Normal User)
Pro


Messaggi: 66
Iscritto: 14/03/2008

Segnala al moderatore
Postato alle 14:33
Venerdì, 03/07/2009
Testo quotato

Postato originariamente da Il Totem:

Codice sorgente - presumibilmente C#

  1. IO.BinaryReader Reader = new IO.BinaryReader(new IO.FileStream("file", IO.FileMode.Open));
  2. const Int32 Length = 0x800;
  3. byte[] Buffer = new byte[Length];
  4. Reader.BaseStream.Position = 0x200;
  5. Buffer = Reader.ReadBytes(Length);
  6. Reader.Close();
  7. string Text = System.Text.UTF8Encoding.UTF8.GetString(Buffer);



OTTIMO!!! Grazie mille!!! Però ho riadattato tutto in base al mio codice sorgente.. Al posto del BinaryReader ho usato il FileStream e per leggere ho usato
Codice sorgente - presumibilmente Plain Text

  1. Main.file.Position = 0x24ADE;
  2. Main.file.Read(Vars.rom, 0, 0x2F);


e infine come Encoding ho usato l'ASCII:
Codice sorgente - presumibilmente Plain Text

  1. textGame.Text = System.Text.ASCIIEncoding.ASCII.GetString(Vars.rom);


Grazie a tutti ragà :k:

PM